/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package evaluate.general;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.el.ELContext;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import system.general.Exc;
import system.general.Logged;
import system.general.Message;
import system.general.Persistencia;

/**
 *
 * @author emojica
 */
@ManagedBean(name = "evaluate_program")
@RequestScoped
public class Main extends Beans {

    //Variables de importación General
    Logged logged;
    private Persistencia persistencia = new Persistencia();
    private Message msg = new Message();
    //Variables de importación otros modulos
    //Variables del modulo
    private Find curriculumdetalleFind = new Find();
    private List<Beans> curriculumdetalleList = new ArrayList<>();
    private Respuestas respuestas = new Respuestas();
    //Variables locales
    private String sql;
    private Map<String, String> map = new LinkedHashMap<>();
    private request.status.Main request_status = new request.status.Main();
    private int idl_estatus = 0;

    public Main() throws Exc, SQLException, Exception {
        ELContext elContext = FacesContext.getCurrentInstance().getELContext();
        logged = (Logged) FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elContext, null, "logged");
        load();
    }

    private void load() throws Exc, SQLException, Exception {
        try {
            setId_solicitud(logged.getMasterId());
            respuestas.cargarTodasRespuestas(getId_solicitud());
        } catch (Exc ex) {
            msg.showMsg(namePackage(), "system", ex.getIdError());
        } catch (SQLException ex) {
            msg.showErr(namePackage(), "sql", ex);
        } catch (Exception ex) {
            msg.showErr(namePackage(), "java", ex);
        } finally {
        }
    }

    public void insert() {
        try {
            //Verifica si se ha seleccionado un registro
            map.clear();
            map.put("id_solicitud = " + getId_solicitud(), " ");

            //Verifica si el registro existe, de lo contrario lo inserta
            if (curriculumdetalleFind.byExist(map)) {
                delete();
                idl_estatus = 10;
            } else {
                idl_estatus = 9;
            }

            for (int i = 1; i < respuestas.preguntaObs.length; i++) {
                boolean preg = false;
                for (int j = 0; j < respuestas.Pregunta[i].size(); j++) {
                    setIdl_pregunta(i);
                    setIdl_respuesta(1);
                    setObservacion(respuestas.preguntaObs[i]);
                    sql = "INSERT INTO public.evaluacion_programa (id_solicitud, idl_pregunta, idl_respuesta,observacion) "
                            + "VALUES (" + getId_solicitud() + ", " + getIdl_pregunta() + ",  " + getIdl_respuesta() + ",'" + getObservacion() + "')";

                    //Inserta los registros
                    persistencia.executeUpdate(sql);
                    preg = true;
                }
                if (preg == false && respuestas.preguntaObs[i] != "") {
                    setIdl_pregunta(i);
                    setIdl_respuesta(0);
                    setObservacion(respuestas.preguntaObs[i]);
                    sql = "INSERT INTO public.evaluacion_programa (id_solicitud, idl_pregunta, idl_respuesta,observacion) "
                            + "VALUES (" + getId_solicitud() + ", " + getIdl_pregunta() + ",  " + getIdl_respuesta() + ",'" + getObservacion() + "')";

                    //Inserta los registros
                    persistencia.executeUpdate(sql);

                }
            }
            request.general.Main request_generalMain = new request.general.Main();
            request_status.insert(logged.getMasterId(), idl_estatus, request_generalMain.getRecibido(), logged.getLoggedId());

            throw new Exc("m1");
        } catch (Exc ex) {
            msg.showMsg(namePackage(), "system", ex.getIdError());
        } catch (SQLException ex) {
            msg.showErr(namePackage(), "sql", ex);
        } catch (Exception ex) {
            msg.showErr(namePackage(), "java", ex);
        } finally {
        }
    }

    public void delete() {
        try {

            if (logged.getMasterId() == 0) {
                throw new Exc("m4");
            }

            //Elimina el resgistro por el id_persona
            deleteById(logged.getMasterId());
            // clear();
        } catch (Exc ex) {
            msg.showMsg(namePackage(), "system", ex.getIdError());
        } catch (SQLException ex) {
            msg.showErr(namePackage(), "sql", ex);
        } catch (Exception ex) {
            msg.showErr(namePackage(), "java", ex);
        } finally {
        }
    }

    public void deleteById(int id) throws Exc, SQLException, Exception {
        //Elimina los detalle por id
        sql = "DELETE FROM public.evaluacion_programa "
                + "WHERE id_solicitud = " + id;
        persistencia.executeUpdate(sql);
    }

    public void clear() {
        logged.setDetailId(0);
        clearBeans();
    }

    public Respuestas getRespuestas() {
        return respuestas;
    }

    private String namePackage() {
        Package pack = this.getClass().getPackage();
        return pack.getName();
    }
}
